package com.bjpowernode.controller;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class ThreeServlet extends HttpServlet {


    /**
     * get请求 中文正常
     * post 中文 乱码
     * 问题原因：
     *          浏览器以get方式发送请求，请求参数是保存在【请求头】，在http请求协议包到达http服务器后，第一件事就是进行解码
     *          请求头中二进制数据由tomcat负责解码，Tomcat9默认使用【utf-8】可以解释一切国家文字
     *
     *          浏览器以post方式发送请求，请求参数保存在【请求体】
     *          请求体二进制内容由当前请求对象，request 负责解码，request默认使用【iso-8859-1】字符集，是一种东欧语系字符集
     *          此时如果请求体中参数内容是中文，将无法解码只能得到乱码
     * 解决方案：
     *          在Post请求方式下，在读取请求体内容之前，应该通知请求对象使用utf-8字符集对请求体内容进行一次重新解码
     *
     * */
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        // 通知请求对象，使用utf-8字符集对请求内容进行一次重新解码
        req.setCharacterEncoding("utf-8");
        // 请求体
        String userName = req.getParameter("userName");
        System.out.println("从请求体得到参数值 " + userName);
    }
    // tomcat 调用时，传入请求，响应对象。

    // http服务器调用 处理方法。

    // doGet方法运行完毕时，实际上是意味着，本次请求已经处理完毕了。

    // http响应协议包，推送给浏览器，完成这次请求处理。

    //电影里，做完了，二位，给你们一个小小的惊喜，就灭了他俩。

    // 推送响应协议包之前，负责销毁 本次请求关联的 req resp 对象。

    // 生命周期贯穿一次请求的处理过程【req】【resp】

    // 相当于用户在服务器的代言人。
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String userName = req.getParameter("userName");
        System.out.println("从请求头得到参数值 " + userName);
    }

}
